package com.tc.controller;


import com.tc.domain.Drugs_info;
import com.tc.dto.Drugs_infoDTO;
import com.tc.dto.Drugs_infoQueryDTO;
import com.tc.service.IDrugs_infoService;
import com.tc.utils.ResultVo;
import com.tc.vo.Drugs_infoVO;
import com.tc.vo.PageResultVO;
import io.swagger.annotations.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author tc
 * @since 2025-07-09
 */
@RestController
@Api(tags = "医保药品信息管理")
@RequestMapping("/drugs_info")
public class Drugs_infoController {

    @Autowired
    private IDrugs_infoService drugsInfoService;

    @ApiOperation(value = "分页查询药品信息")
    @PostMapping("/page")
    public ResultVo<PageResultVO<Drugs_infoVO>> page(@RequestBody Drugs_infoQueryDTO queryDTO) {
        try {
            // 调用Service层方法进行复杂查询
            PageResultVO<Drugs_infoVO> pageVO = drugsInfoService.pageQuery(queryDTO);
            return ResultVo.ok(pageVO);
        } catch (Exception e) {
            return ResultVo.error(e);
        }
    }

    @ApiOperation(value = "根据ID查询药品信息")
    @GetMapping("/{id}")
    public ResultVo<Drugs_infoVO> getById(@PathVariable("id") Long id) {
        try {
            // 简单查询直接使用MyBatis-Plus
            Drugs_info drugsInfo = drugsInfoService.getById(id);
            if (drugsInfo != null) {
                Drugs_infoVO vo = new Drugs_infoVO();
                BeanUtils.copyProperties(drugsInfo, vo);
                return ResultVo.ok(vo);
            } else {
                return ResultVo.fail("药品信息不存在");
            }
        } catch (Exception e) {
            return ResultVo.error(e);
        }
    }

    @ApiOperation(value = "新增药品信息")
    @PostMapping("/add")
    public ResultVo<Boolean> add(@RequestBody Drugs_infoDTO drugsInfoDTO) {
        try {
            // 简单的数据保存操作，直接使用MyBatis-Plus
            Drugs_info drugsInfo = new Drugs_info();
            BeanUtils.copyProperties(drugsInfoDTO, drugsInfo);
            
            boolean result = drugsInfoService.save(drugsInfo);
            if (result) {
                return ResultVo.ok(true, "新增药品信息成功");
            } else {
                return ResultVo.fail("新增药品信息失败");
            }
        } catch (Exception e) {
            return ResultVo.error(e);
        }
    }

    @ApiOperation(value = "修改药品信息")
    @PutMapping("/update")
    public ResultVo<Boolean> update(@RequestBody Drugs_infoDTO drugsInfoDTO) {
        try {
            // 判断ID是否存在
            if (drugsInfoDTO.getDrugId() == null) {
                return ResultVo.fail("药品ID不能为空");
            }
            
            // 判断药品是否存在
            Drugs_info existDrugsInfo = drugsInfoService.getById(drugsInfoDTO.getDrugId());
            if (existDrugsInfo == null) {
                return ResultVo.fail("药品信息不存在");
            }
            
            // 简单的更新操作，直接使用MyBatis-Plus
            Drugs_info drugsInfo = new Drugs_info();
            BeanUtils.copyProperties(drugsInfoDTO, drugsInfo);
            
            boolean result = drugsInfoService.updateById(drugsInfo);
            if (result) {
                return ResultVo.ok(true, "修改药品信息成功");
            } else {
                return ResultVo.fail("修改药品信息失败");
            }
        } catch (Exception e) {
            return ResultVo.error(e);
        }
    }

    @ApiOperation(value = "删除药品信息", notes = "根据药品ID删除药品信息(逻辑删除)")
    @PostMapping("/delete/{id}")
    public ResultVo<Boolean> delete(@PathVariable("id") Long id) {
        try {
            // 判断药品是否存在
            Drugs_info existDrugsInfo = drugsInfoService.getById(id);
            if (existDrugsInfo == null) {
                return ResultVo.fail("药品信息不存在");
            }
            
            // 简单的删除操作，直接使用MyBatis-Plus
            boolean result = drugsInfoService.removeById(id);
            if (result) {
                return ResultVo.ok(true, "删除药品信息成功");
            } else {
                return ResultVo.fail("删除药品信息失败");
            }
        } catch (Exception e) {
            return ResultVo.error(e);
        }
    }
    
    @ApiOperation(value = "批量删除药品信息", notes = "根据多个药品ID批量删除药品信息(逻辑删除)")
    @PostMapping("/batch/delete")
    public ResultVo<Boolean> batchDelete(@RequestBody List<Long> ids) {
        try {
            if (ids == null || ids.isEmpty()) {
                return ResultVo.fail("请选择要删除的药品");
            }
            
            // 简单的批量删除操作，直接使用MyBatis-Plus
            boolean result = drugsInfoService.removeByIds(ids);
            if (result) {
                return ResultVo.ok(true, "批量删除药品信息成功");
            } else {
                return ResultVo.fail("批量删除药品信息失败");
            }
        } catch (Exception e) {
            return ResultVo.error(e);
        }
    }
}
